<?php

namespace App\Http\Controllers\Admin;

use App\Models\AdminModule;
use App\User;
use function foo\func;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Spatie\Permission\Models\Role;

class UserRoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
//        dd(User::get()->first()->getRoleNames()->toArray());
//        dd(auth()->user()->getRoleNames());
         $users = User::where('id','<>',1)->paginate(6);
        return view('admin.user_role_index',compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //方式一:可以通过调用request对象中的input()方法获取到request请求接收到的参数$data,然后在给前台传递参数的时候直接将$data传递到前台就可以了.
        //方式二:可以在前台页面中使用request()函数获取加载这个页面时候request请求中的数据,这样就不同传递直接在前台中使用request('sou')就可以了.
        $data = $request->input('sou');
        //在检索查询的时候需要排除系统管理员,在剩下的集合中进行匹配
                $users = User::where('id','<>',1)->Where('email','like',"%$data%")->paginate(6);
        //渲染视图并传递参数的时候可以传递多个参数到前台
        return view('admin.user_role_index',compact('users','data'));
        //批量给一个用户分配角色
//        $user->assignRole(['writer', 'admin']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit(User $user_role)
    {

        $modules = AdminModule::get();
        //获取角色表中的所有数据
        $roles = Role::all();
        return view('admin.user_role_edit',compact('modules','user_role','roles'));

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request,User $user_role)
    {
        //$user->assignRole(['writer', 'admin']); 虽然也能一次将多个角色指定给某个用户,但是不会同步,当用户之前有3个角色,后来改成2个角色后,如果用这个方法,提交完成后用户还是3个角色.
        // All current roles will be removed from the user and replaced by the array given
        //相反使用下面的命令就能用当前给定的角色同步刷新替换用户之前的角色,用这个就比较好
        //$user->syncRoles(['writer', 'admin']);
//        $user_role->syncRoles($request->toArray()['role']);
//        dd($request->input('role'));
        $user_role->syncRoles($request->input('role'));
        return redirect(route('admin.user_role.index'))->with('success','用户修改角色完成');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}
